{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "biblical-positive",
   "metadata": {},
   "outputs": [],
   "source": [
    "from gs_quant.session import GsSession\n",
    "# external users should substitute their client id and secret; please skip this step if using internal jupyterhub\n",
    "GsSession.use(client_id=None, client_secret=None, scopes=('run_analytics',)) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "identified-radical",
   "metadata": {},
   "source": [
    "### IR Implied Volatility Across Strikes\n",
    "\n",
    "We look at how the implied vol changes for swaptions with varying strikes but fixed expiries."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "expired-continuity",
   "metadata": {},
   "outputs": [],
   "source": [
    "from gs_quant.instrument import IRSwaption\n",
    "from gs_quant.common import PayReceive\n",
    "from gs_quant.markets.portfolio import Portfolio\n",
    "from gs_quant.risk import IRAnnualImpliedVol\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "pd.options.display.float_format = '{:,.0f}'.format\n",
    "\n",
    "def moneyness_curve(expiration, termination, pay_rec, ccy, min_bps, max_bps, step_size):\n",
    "    eval_range =np.arange(min_bps, max_bps + step_size, step_size).tolist()\n",
    "    num_instr = len(termination)\n",
    "    results = pd.DataFrame(index = eval_range)\n",
    "    for i in range(num_instr):\n",
    "        portfolios = Portfolio([IRSwaption(pay_or_receive=pay_rec, notional_currency=ccy, termination_date=termination[i], \n",
    "                                                          expiration_date=expiration[i], strike=f'ATMF+{eval_K}') for eval_K in eval_range])\n",
    "        portfolios.resolve()\n",
    "        name_i = expiration[i] + termination[i] +' '+ ccy +' '+ pay_rec\n",
    "        results[name_i] = portfolios.calc(IRAnnualImpliedVol).to_frame().values  * 10000 \n",
    "\n",
    "    plt.figure(figsize=(8, 5))\n",
    "    plt.plot(results)\n",
    "    plt.xlabel('Moneyness (bps)')\n",
    "    plt.ylabel('Implied Ann. Volatility (bps)')\n",
    "    plt.legend(results.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "confused-medication",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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a9aMUaNGXRtr/IknnmDmzJkAHD58mIyMDCIiIgo9j1KKBx98kKioKKZMmQIYpdzy5ctf+xIwY8aM255pbNSoUbz77ru0bt2aV155hSNHjhR4bK1atcjNzeXixYsFHpOWlsaaNWto2rQpffr0YevWrezevZuGDRsybdo0ypYtS4cOHfjxxx8BmDdvHn369LH5y4oQQthTamYOI2Zs5UR8KlMej6ZpWHmzQyqQa1SVLx8P5/cW7zkrN4Vu79zRW5955hleffVVlFK8+uqr/N///R/Tp0+nf//+vPXWW7z//vtMnz6dESNGFHmu33//napVq3Lx4kW6dOlCgwYNaN++PaNHj2bGjBl89NFHfPPNN2zZsuWW916dwjO/bZGRkRw/fpyVK1eyevVqWrZsycaNG2978JNjx44RGRmJUoqePXvSrVs3fv31V1555RUuX75MSkoKXbt2BYwJVt577z169erFjBkzmDp16m1dSwgh7CEjO5cxX25j79krfDa4BW3rFO+jyeLmGom7hAkJCbm2/uSTT/LII48AUKpUKbp06cKSJUuYP38+27dvL/JcV6uzg4OD6d27N1u2bKF9+/b07duXCRMm0KlTJ6KioqhUqdIt761UqdK10j7cOq1nmTJl6NOnD3369MHDw4Nly5blm7iPHz+Op6fntelJ87r6jDuvESNGsHjxYiIiIpg5c+a1qUnbtm3LyZMnWbt2Lbm5ubc06hNCCEfLybXw/NydrD+awIf9I3ioSWWzQyqSayTuOywZ28vVubgBvvvuuxsS1OjRo3n00Ue57777CpzV66rU1FQsFgtly5YlNTWVlStX8tprrwHg5+dH165deeaZZ67NSnazDh06MGfOHB544AGUUsyaNYuOHTsCsH79eho1akTFihXJyspi//7916bfzCsuLo6nn36asWPH5luCz09ycjKhoaFkZ2fz1Vdf3fAs/fHHH2fw4MG8+uqrNp1LCCHsxWLRvPjtHlbuv8Abjzaib1SY2SHZxDUSt0kGDRrE2rVriY+PJywsjAkTJvDEE0/w4osvsmvXLpRS1KhRg8mTJ197T1RUFOXKlbvhmfT58+eJjo4mKSkJDw8PPvnkE/bv3098fDy9e/cGICcnh8GDB/PQQw9de9+QIUP47rvvePDBB/ONb8yYMRw8eJCIiAiUUkRHR1+b4OTYsWM888wzaK2x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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "expiration = ['10y','15y']\n",
    "termination = ['10y', '15y']\n",
    "pay_rec = 'Pay'\n",
    "ccy = 'USD'\n",
    "min_bps = -300\n",
    "max_bps = 300\n",
    "step_size = 20\n",
    "\n",
    "moneyness_curve(expiration, termination, pay_rec, ccy, min_bps, max_bps, step_size)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}